#pragma once

#include <QToolBar>

class QLineEdit;
class QLabel;

namespace Domy {

/**
 * @brief The MessageActionKey enum
 * @note  消息动作key
 */
enum MessageActionKey {
    MsgAct_Export = 0,
    MsgAct_Clear,
    MsgAct_ZoomIn,
    MsgAct_ZoomOut,
    MsgAct_ZoomReset
};

/**
 * @brief The MessageToolBar class
 * @note  消息工具栏
 */
class MessageToolBar : public QToolBar
{
    Q_OBJECT
public:
    explicit MessageToolBar(QWidget *parent = Q_NULLPTR);
    ~MessageToolBar();

    /**
     * @brief setZoomDisplay
     * @note  设置缩放值显示
     */
    void setZoomValueDisplay(int zoom);

    /**
     * @brief isCaseSensitive
     * @note  获取大小写敏感状态
     */
    bool isCaseSensitive() const;

    /**
     * @brief isWholeWord
     * @note  获取整词状态
     */
    bool isWholeWord() const;

    /**
     * @brief setFindText
     * @note  设置查找文本
     * @param text 查找文本
     */
    void setFindText(const QString &text);

    /**
     * @brief getFindText
     * @note  获取查找文本
     */
    QString getFindText() const;

signals:
    /**
     * @brief signalFind
     * @note  查找信号
     * @param text              查找文本
     * @param is_case_sensitive 大小写敏感
     * @param is_whole_word     整词查找
     */
    void signalFind(const QString &text, bool is_case_sensitive, bool is_whole_word);

    /**
     * @brief signalFindNext
     * @note  查找下一个信号
     * @param text              查找文本
     * @param is_case_sensitive 大小写敏感
     * @param is_whole_word     整词查找
     */
    void signalFindNext(const QString &text, bool is_case_sensitive, bool is_whole_word);

    /**
     * @brief signalFindPrevious
     * @note  查找上一个信号
     * @param text              查找文本
     * @param is_case_sensitive 大小写敏感
     * @param is_whole_word     整词查找
     */
    void signalFindPrevious(const QString &text, bool is_case_sensitive, bool is_whole_word);

    /**
     * @brief signalClearFindResult
     * @note  清除查找结果
     */
    void signalClearFindResult();

    /**
     * @brief signalMsgActionTriggered
     * @note  消息动作触发信号
     */
    void signalMsgActionTriggered(QAction *action);

private slots:
    void slotOnActionTriggered(QAction *action);
    void slotOnFindTextChanged(const QString &text);
    void slotOnFindTextEditFinished();

private:
    QString    m_find_text;

    QLabel    *m_label_zoom;
    QLineEdit *m_le_find;

    bool       m_is_case_sensitive;
    bool       m_is_whole_word;
};

} // namespace Domy
